package cn.tedu.javagame.star;

import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.util.List;
import java.util.Timer;

//面板类型，相当于窗口上的玻璃
public class StarPanel extends JPanel {
    //Color bgColor = Color.blue;//面板颜色
    Color bgColor = new Color(167,255,255);
    List<Star> stars = new ArrayList<Star>();
    /**  声明数组
     * Star[] stars = new Star[500];
     **/
    //构造
    public StarPanel(){
        this.setBackground(bgColor);
        for (int i = 0; i < 150; i++) {
            stars.add(new Star());
        }
        /**
         * for(int i=0;i<stars.length; i++){
         *   stars[i]= new Star();
         * }
         **/
    }

    //此方法是父类提供的，代表画画，在此处进行重写，实现待定的业务，而且这个方法会被自动的调用
    public void paint(Graphics g){
        super.paint(g);//需要调用一下父类的paint
        //月亮
        g.setColor(new Color(255,244,96));
        g.fillOval(100,100,100,100);
        g.setColor(new Color(167,255,255));
        g.fillOval(130,70,100,100);
        //设置大小
        Font font = new Font("宋体",Font.BOLD,30);
        g.setFont(font);
        //星星
        for (Star star : stars) {
            g.setColor(star.currentColor);
            g.drawString(star.label, star.x, star.y);
            if (star.y > StarFrame.HEIGHT) { //重置星星位置
                star.y = 0;
                star.x = (int) (Math.random() * StarFrame.WIDTH);
            }
        }
        /**
         * for(int i=0;i<stars.length; i++){
         *   g.setColor(stars[i].color);
         *   g.drawString(stars[i].label,stars[i].x,stars[i].y);
         * }
         **/
    }
    //表示游戏的启动
    public void action(){
        //创建定时器对象---其本质是封装了线程
        Timer timer = new Timer();
        //启动定时器
         /**三个参数
         //1、是一个匿名内部类的对象。这个不存在的类实现了接口--TimerTask
         //2、整数，表示毫秒。程序执行到这时，经过x毫秒，开始执行第一个参数内容
         //3、整数，表示毫秒。程序执行完第一个参数内容后，以后每经过y毫秒，反复执行第一个参数
         **/
        timer.schedule(new TimerTask(){
            public void run(){
                for (Star star : stars){
                    star.move();
                }
                //重绘，刷新的意思
                repaint();
                /**
                 * for(int i=0;i<stars.length; i++){
                 *   stars[i].move();
                 * }
                 **/
            }
        },10,100);
    }
}
